// 使用函数模板 对数组排序
/*
100 99 108 105 114 110 122 108 120 108 
n v e p f b m o x t 
*/
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

template<typename ARR_T, typename SIZE_T>
void arrayInit(ARR_T arr, SIZE_T size);

template<typename ARR_T, typename SIZE_T>
void arraySort(ARR_T arr, SIZE_T size);

// 输出
template<typename ARR_T, typename SIZE_T>
void arrayTraverse(ARR_T arr, SIZE_T size);


int main(int argc, char **argv)
{
    /*变量定义*/
    int arr[10] = {0};
    char arr1[10] = "";


    // 设置随机数种子
    srand(time(NULL));

    // 初始化
    arrayInit(arr, sizeof(arr) / sizeof(arr[0]));

    // 排序
    arraySort(arr, sizeof(arr) / sizeof(arr[0]));

    // 输出
    arrayTraverse(arr, sizeof(arr) / sizeof(arr[0]));

    // 初始化
    arrayInit(arr1, sizeof(arr1) / sizeof(arr1[0]));

    // 排序
    arraySort(arr1, sizeof(arr1) / sizeof(arr1[0]));

    // 输出
    arrayTraverse(arr1, sizeof(arr1) / sizeof(arr1[0]));


    return 0;
}

// 数组初始化
template<typename ARR_T, typename SIZE_T>
void arraySort(ARR_T arr, SIZE_T size)
{

    int n = 0;

    for (n = 0; n < size; n++)
    {
        arr[n] = rand() % 26 + 'a';
    }



    return;
}

// 数组排序
template<typename ARR_T, typename SIZE_T>
void arrayInit(ARR_T arr, SIZE_T size)
{
    int i = 0;
    int j = 0;
    

    for (i = 0; i < size - 1; i++)
    {

        for (j = 0; j < size - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                arr[j] ^= arr[j + 1];
                arr[j + 1] ^= arr[j];
                arr[j] ^= arr[j + 1];
            }
        }
    }




    return;
}

// 输出
template<typename ARR_T, typename SIZE_T>
void arrayTraverse(ARR_T arr, SIZE_T size)
{
    int i = 0;

    for (i = 0; i < size; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;





    return;
}